Skill

কন্ট্রোলার এবং অ্যাকশন মেথড

Web Development - এএসপি ডট (ASP.Net) -

ASP.Net MVC (Model-View-Controller) আর্কিটেকচারে কন্ট্রোলার এবং অ্যাকশন মেথড গুরুত্বপূর্ণ ভূমিকা পালন করে। কন্ট্রোলার হচ্ছে একটি ক্লাস যা HTTP অনুরোধের জন্য কোড পরিচালনা করে এবং অ্যাকশন মেথড সেই কোড যা HTTP রিকোয়েস্ট অনুযায়ী ব্যবহারকারীর জন্য আউটপুট তৈরি করে।


১. কন্ট্রোলার (Controller)

কন্ট্রোলার হল একটি ক্লাস যা Controller বেস ক্লাস থেকে ইনহেরিট করে। কন্ট্রোলার এর প্রধান কাজ হলো ব্যবহারকারীর অনুরোধ (HTTP Request) গ্রহণ করা এবং উপযুক্ত মডেল থেকে ডেটা নিয়ে তা ভিউ তে পাঠানো।

কন্ট্রোলার কিভাবে কাজ করে:

  • URL Routing: যখন একটি URL হিট করা হয়, রাউটিং সিস্টেম সেই URL কে কন্ট্রোলারে মেপ করে, এবং সংশ্লিষ্ট অ্যাকশন মেথড কল করে।
  • ACTIONS: কন্ট্রোলারে এক বা একাধিক অ্যাকশন মেথড থাকতে পারে, প্রতিটি মেথড কোনো না কোনো HTTP অনুরোধ (GET, POST, PUT, DELETE) প্রক্রিয়া করে।

কন্ট্রোলার ক্লাসের উদাহরণ:

public class HomeController : Controller
{
    // Index অ্যাকশন মেথড
    public IActionResult Index()
    {
        return View();
    }

    // About অ্যাকশন মেথড
    public IActionResult About()
    {
        return View();
    }
}

এখানে HomeController নামক কন্ট্রোলার দুটি অ্যাকশন মেথড (Index এবং About) ধারণ করে।


২. অ্যাকশন মেথড (Action Method)

অ্যাকশন মেথড হচ্ছে কন্ট্রোলারের একটি মেথড যা HTTP রিকোয়েস্টের জন্য কাস্টম লজিক প্রসেস করে এবং রেসপন্স রিটার্ন করে।

অ্যাকশন মেথডের বৈশিষ্ট্যসমূহ:

  • Return Type: সাধারণত, অ্যাকশন মেথড একটি View (ভিউ রিটার্ন করে) অথবা অন্য কোন ActionResult টাইপ রিটার্ন করে।
  • HTTP Verb: অ্যাকশন মেথড HTTP অনুরোধের ধরণ (GET, POST, PUT, DELETE) অনুযায়ী ডিফাইন করা যেতে পারে। উদাহরণ:
    • GET: ডেটা পাওয়ার জন্য।
    • POST: ডেটা প্রেরণ বা আপডেট করার জন্য।

অ্যাকশন মেথডের উদাহরণ:

public class HomeController : Controller
{
    // GET: /Home/Index
    public IActionResult Index()
    {
        // এখানে আপনি মডেল ডেটা পাঠাতে পারেন।
        return View();
    }

    // POST: /Home/SubmitForm
    [HttpPost]
    public IActionResult SubmitForm(FormData data)
    {
        if (ModelState.IsValid)
        {
            // প্রাপ্ত ডেটা প্রসেস করুন
            return RedirectToAction("Success");
        }
        return View(data);
    }

    // Success অ্যাকশন
    public IActionResult Success()
    {
        return View();
    }
}

এখানে,

  • Index() মেথড একটি GET অনুরোধের জন্য View রিটার্ন করে।
  • SubmitForm(FormData data) মেথড একটি POST অনুরোধ গ্রহণ করে এবং একটি সফল পৃষ্ঠা (Success) এ রিডিরেক্ট করে।

৩. অ্যাকশন মেথডের Attribute গুলি

ASP.Net MVC কন্ট্রোলারের অ্যাকশন মেথডে কিছু বিশেষ অ্যাট্রিবিউট ব্যবহার করা যেতে পারে, যেমন:

  • [HttpGet]: এটি কেবল GET অনুরোধের জন্য অ্যাকশন মেথডকে নিষিদ্ধ করে।
  • [HttpPost]: এটি কেবল POST অনুরোধের জন্য অ্যাকশন মেথডকে নিষিদ্ধ করে।
  • [HttpPut]: PUT অনুরোধের জন্য।
  • [HttpDelete]: DELETE অনুরোধের জন্য।

উদাহরণ:

[HttpGet]
public IActionResult Edit(int id)
{
    var item = dbContext.Items.Find(id);
    return View(item);
}

[HttpPost]
public IActionResult Edit(int id, Item updatedItem)
{
    if (ModelState.IsValid)
    {
        dbContext.Items.Update(updatedItem);
        return RedirectToAction("Index");
    }
    return View(updatedItem);
}

এখানে, Edit() মেথড GET এবং POST অনুরোধের জন্য আলাদা ভাবে কাজ করছে।


৪. ACTIONS এবং ROUTES

  • Routing: URL গুলি কন্ট্রোলার অ্যাকশন মেথডের সাথে মিলে যায়। উদাহরণস্বরূপ, /home/index URL টা HomeController এর Index() অ্যাকশন মেথডে রিডিরেক্ট হবে।
  • Route Parameters: URL প্যারামিটার হিসেবে ডেটা পাঠানোও সম্ভব, যেমন /home/details/5 যেখানে 5 একটি প্যারামিটার যা কন্ট্রোলার অ্যাকশন মেথডে প্রাপ্ত হবে।
public IActionResult Details(int id)
{
    var item = dbContext.Items.Find(id);
    return View(item);
}

৫. অ্যাকশন মেথড রিটার্ন ভ্যালু

অ্যাকশন মেথড সাধারণত নিচের রিটার্ন ভ্যালুগুলি রিটার্ন করে:

  • ViewResult: এটি HTML ভিউ রিটার্ন করে।
  • RedirectToActionResult: একটি অ্যাকশন বা রাউটে রিডিরেক্ট করে।
  • JsonResult: JSON ডেটা রিটার্ন করে।
  • ContentResult: কাঁচা টেক্সট বা HTML রিটার্ন করে।
  • PartialViewResult: প Partial View রিটার্ন করে।

ASP.Net কন্ট্রোলার এবং অ্যাকশন মেথডগুলি MVC আর্কিটেকচারের জন্য অত্যন্ত গুরুত্বপূর্ণ। এগুলি ব্যবহার করে অ্যাপ্লিকেশন লজিক এবং ইউজার ইন্টারফেসের মধ্যে শক্তিশালী যোগাযোগ স্থাপন করা যায়।

Content added By

কন্ট্রোলার তৈরি এবং কনফিগার করা

ASP.Net MVC এবং ASP.Net Core MVC অ্যাপ্লিকেশন তৈরি করার সময় Controller হলো এমন একটি গুরুত্বপূর্ণ উপাদান, যা HTTP অনুরোধকে গ্রহণ করে, প্রয়োজনীয় ডেটা প্রস্তুত করে এবং সেই ডেটাকে View এর মাধ্যমে ব্যবহারকারীর কাছে প্রদর্শন করে। কন্ট্রোলারের মাধ্যমে অ্যাপ্লিকেশনের লজিক এবং ইউজার ইন্টারঅ্যাকশন পরিচালনা করা হয়।


কন্ট্রোলার কী?

Controller হলো MVC (Model-View-Controller) আর্কিটেকচারের একটি অংশ যা ইউজারের অনুরোধের ভিত্তিতে Model থেকে ডেটা নিয়ে তা View এর মাধ্যমে প্রদর্শন করে। কন্ট্রোলার ক্লাসগুলির মধ্যে সাধারণত একাধিক অ্যাকশন মেথড থাকে, যা HTTP অনুরোধের জন্য রেসপন্স তৈরি করে।


কন্ট্রোলার তৈরি করার পদ্ধতি

১. Visual Studio দিয়ে কন্ট্রোলার তৈরি করা

  1. Visual Studio চালু করুন এবং একটি ASP.Net Core MVC প্রজেক্ট খুলুন।
  2. Solution Explorer থেকে Controllers ফোল্ডারটি সিলেক্ট করুন।
  3. Add মেনু থেকে New Item নির্বাচন করুন।
  4. Add New Item উইন্ডো থেকে Class নির্বাচন করুন এবং ক্লাসের নাম দিন, যেমন HomeController.cs
  5. কন্ট্রোলার ক্লাসের ভিতরে নিচের মতো কোড লিখুন:

    using Microsoft.AspNetCore.Mvc;
    
    public class HomeController : Controller
    {
        // GET: /Home/
        public IActionResult Index()
        {
            return View();
        }
    
        // GET: /Home/About
        public IActionResult About()
        {
            return View();
        }
    
        // GET: /Home/Contact
        public IActionResult Contact()
        {
            return View();
        }
    }
    

২. ASP.Net Core MVC কন্ট্রোলারের বেসিক স্ট্রাকচার

কন্ট্রোলার ক্লাসটির উপরে Controller ক্লাসের একটি ডেরিভেটিভ হওয়া উচিত, এবং প্রতিটি অ্যাকশন মেথডের মধ্যে সাধারণত IActionResult রিটার্ন টাইপ থাকে। নিচে একটি বেসিক কন্ট্রোলারের কোড দেখানো হলো:

using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    // Index Action
    public IActionResult Index()
    {
        return View();
    }

    // About Action
    public IActionResult About()
    {
        return View();
    }
}

কন্ট্রোলার মেথডের বিভিন্ন ধরনের HTTP অ্যাকশন

কন্ট্রোলারে সাধারণত HTTP এর বিভিন্ন মেথডের জন্য আলাদা অ্যাকশন মেথড থাকে। কিছু সাধারণ HTTP অ্যাকশন মেথড:

১. GET মেথড

  • সাধারণত ভিউ রেন্ডার করার জন্য ব্যবহৃত হয়, যেমন একটি পেজ লোড করা।

    public IActionResult Index()
    {
        return View();
    }
    

২. POST মেথড

  • ব্যবহারকারীর থেকে ডেটা গ্রহণ করার জন্য ব্যবহৃত হয়, যেমন ফর্ম সাবমিট।

    [HttpPost]
    public IActionResult SubmitForm(MyModel model)
    {
        if (ModelState.IsValid)
        {
            // ডেটা প্রক্রিয়া করুন
        }
        return View();
    }
    

৩. PUT মেথড

  • সাধারনত ডেটা আপডেট করার জন্য ব্যবহৃত হয়।

    [HttpPut]
    public IActionResult UpdateData(int id, MyModel model)
    {
        if (ModelState.IsValid)
        {
            // ডেটা আপডেট করুন
        }
        return RedirectToAction("Index");
    }
    

৪. DELETE মেথড

  • ডেটা মুছতে ব্যবহৃত হয়।

    [HttpDelete]
    public IActionResult DeleteData(int id)
    {
        // ডেটা মুছুন
        return RedirectToAction("Index");
    }
    

কন্ট্রোলার কনফিগার করা

ASP.Net Core MVC প্রজেক্টে কন্ট্রোলারের রাউটিং এবং কনফিগারেশন Startup.cs ফাইলে করা হয়। এই ফাইলে আপনি কন্ট্রোলারগুলির রাউটিং এবং অন্যান্য কনফিগারেশন সেটআপ করতে পারেন।

১. Routing কনফিগারেশন

Startup.cs ফাইলের মধ্যে Configure মেথডে রাউটিং কনফিগার করা হয়। সাধারণত, UseEndpoints মেথডের মধ্যে কন্ট্রোলারের রাউটিং কনফিগার করা থাকে:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();
    
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

এখানে, {controller=Home} এবং {action=Index} ডিফল্ট কন্ট্রোলার এবং অ্যাকশন সেট করে দিয়েছে। অর্থাৎ, / URL এ যাওয়া হলে স্বয়ংক্রিয়ভাবে HomeController এর Index অ্যাকশন কল হবে।

২. কাস্টম রাউটিং

আপনি কন্ট্রোলারের অ্যাকশনগুলির জন্য কাস্টম রাউটও সেট করতে পারেন:

[Route("products/{id}")]
public IActionResult ProductDetails(int id)
{
    var product = _context.Products.Find(id);
    return View(product);
}

এই কন্ট্রোলারটি /products/5 URL এ গিয়ে ProductDetails অ্যাকশন কল করবে।


কন্ট্রোলারের অ্যাকশন মেথডের রিটার্ন ভ্যালু

কন্ট্রোলারের অ্যাকশন মেথডগুলি সাধারণত IActionResult রিটার্ন করে, তবে আপনি সরাসরি ViewResult, RedirectToActionResult, JsonResult ইত্যাদি রিটার্ন করতে পারেন।

১. ViewResult:

public IActionResult Index()
{
    return View();
}

২. RedirectToActionResult:

public IActionResult RedirectToHome()
{
    return RedirectToAction("Index", "Home");
}

৩. JsonResult:

public IActionResult GetJsonData()
{
    var data = new { Name = "Product", Price = 100 };
    return Json(data);
}

সারাংশ

ASP.Net MVC বা ASP.Net Core MVC এ কন্ট্রোলার তৈরি এবং কনফিগারেশন হলো অ্যাপ্লিকেশনের কার্যকরী অংশ। কন্ট্রোলারের মাধ্যমে HTTP অনুরোধগুলির জন্য ডেটা প্রক্রিয়া এবং ভিউ রেন্ডার করা হয়। কন্ট্রোলারের মধ্যে বিভিন্ন অ্যাকশন মেথড থাকে যা HTTP এর বিভিন্ন মেথডের জন্য রেসপন্স তৈরি করে। কন্ট্রোলারের রাউটিং কনফিগারেশনের জন্য Startup.cs ফাইলের মধ্যে সেটআপ করা হয়।

Content added By

অ্যাকশন মেথডস এবং Return Types

ASP.Net MVC অ্যাপ্লিকেশনে, অ্যাকশন মেথডস (Action Methods) হল কন্ট্রোলারের সেই মেথডগুলো যা HTTP রিকোয়েস্টের জন্য সাড়া দেয়। এই মেথডগুলো ব্যবহারকারীর রিকোয়েস্টের উপর ভিত্তি করে ডেটা রিটার্ন করে এবং সাধারণত View অথবা Redirect বা JSON রিটার্ন করে।

এখানে অ্যাকশন মেথডস এবং তাদের বিভিন্ন Return Types নিয়ে বিস্তারিত আলোচনা করা হলো।


১. অ্যাকশন মেথডস (Action Methods)

অ্যাকশন মেথড একটি পাবলিক মেথড হিসেবে কন্ট্রোলার ক্লাসের মধ্যে ডিফাইন করা হয়। এই মেথডটি HTTP রিকোয়েস্টের প্রতি সাড়া প্রদান করে এবং সাধারণত View, Redirect, JSON, PartialView ইত্যাদি রিটার্ন করে।

উদাহরণ:

using Microsoft.AspNetCore.Mvc;

namespace MyFirstAspNetApp.Controllers
{
    public class HomeController : Controller
    {
        // Action Method: Returns a View
        public IActionResult Index()
        {
            return View();
        }
        
        // Action Method: Returns a Redirect
        public IActionResult RedirectToAbout()
        {
            return RedirectToAction("About");
        }
        
        // Action Method: Returns JSON Data
        public IActionResult GetJsonData()
        {
            var data = new { Name = "John", Age = 30 };
            return Json(data);
        }
    }
}

২. Return Types

অ্যাকশন মেথড বিভিন্ন ধরনের রিটার্ন টাইপ ব্যবহার করতে পারে, যা নিচে ব্যাখ্যা করা হলো:

১. ViewResult

  • ViewResult হলো সাধারণত View রিটার্ন করার জন্য ব্যবহৃত হয়। এটি HTML পেজ বা Razor view রেন্ডার করতে সাহায্য করে।
  • IActionResult এর একটি বিশেষ ধরন, যেটি View রিটার্ন করে।

উদাহরণ:

public IActionResult Index()
{
    return View(); // Renders the default view (Index.cshtml)
}

২. RedirectResult

  • RedirectResult ব্যবহার করে আপনি অন্য একটি অ্যাকশন অথবা URL এ রিডাইরেক্ট করতে পারেন।
  • সাধারণত RedirectToAction মেথডের মাধ্যমে RedirectResult রিটার্ন করা হয়।

উদাহরণ:

public IActionResult RedirectToAbout()
{
    return RedirectToAction("About"); // Redirects to the About action method
}

৩. JsonResult

  • JsonResult JSON ফরম্যাটে ডেটা রিটার্ন করার জন্য ব্যবহৃত হয়। এটি সাধারণত AJAX রিকোয়েস্টের জন্য ব্যবহৃত হয়।
  • এটি JSON ডেটা রিটার্ন করে, যা JavaScript এ প্রোসেস করা যায়।

উদাহরণ:

public IActionResult GetJsonData()
{
    var data = new { Name = "John", Age = 30 };
    return Json(data); // Returns JSON data
}

৪. PartialViewResult

  • PartialViewResult একটি পার্শ্বিক ভিউ (Partial View) রিটার্ন করে যা পূর্ণ পেজের অংশ হিসেবে রেন্ডার হয়। এটি সাধারণত ডায়নামিক কন্টেন্ট বা AJAX এর মাধ্যমে লোড করার জন্য ব্যবহৃত হয়।

উদাহরণ:

public IActionResult GetPartialView()
{
    return PartialView("_MyPartialView"); // Renders a partial view
}

৫. ContentResult

  • ContentResult কোনো কন্টেন্ট (যেমন plain text বা HTML) রিটার্ন করতে ব্যবহৃত হয়। এটি HTTP রেসপন্সে সরাসরি কন্টেন্ট সন্নিবেশ করে।

উদাহরণ:

public IActionResult GetContent()
{
    return Content("Hello, this is a plain text response."); // Returns plain text
}

৬. FileResult

  • FileResult ফাইল রিটার্ন করার জন্য ব্যবহৃত হয়, যেমন পিডিএফ, ইমেজ, অথবা ডাউনলোডযোগ্য ফাইল।

উদাহরণ:

public IActionResult DownloadFile()
{
    var filePath = "path/to/file.pdf";
    return File(filePath, "application/pdf", "downloadedfile.pdf"); // Returns a file for download
}

৩. ActionResult vs IActionResult

  • IActionResult একটি ইন্টারফেস, যা বিভিন্ন ধরনের রিটার্ন টাইপ (যেমন ViewResult, JsonResult, RedirectResult) ধারণ করতে পারে।
  • ActionResult একটি কনক্রিট ক্লাস যা IActionResult ইন্টারফেসকে বাস্তবায়ন করে। আপনি ActionResult বা IActionResult যেকোনো একটিকে রিটার্ন টাইপ হিসেবে ব্যবহার করতে পারেন।

উদাহরণ:

public IActionResult Index()
{
    return View(); // IActionResult type
}

public ActionResult About()
{
    return View(); // ActionResult type
}

৪. অ্যাকশন মেথডের উপর Attribute ব্যবহার

অ্যাকশন মেথডগুলিতে আপনি নির্দিষ্ট Attributes ব্যবহার করতে পারেন, যেমন [HttpGet], [HttpPost], [Route] ইত্যাদি।

উদাহরণ:

[HttpGet]
public IActionResult GetData()
{
    return Json(new { message = "This is a GET request" });
}

[HttpPost]
public IActionResult PostData([FromBody] MyModel model)
{
    return Json(new { message = "Data received", model });
}

এভাবে ASP.Net অ্যাপ্লিকেশনে বিভিন্ন ধরনের অ্যাকশন মেথডস এবং তাদের Return Types ব্যবহার করে আপনি প্রোজেক্টের কার্যকারিতা এবং পারফরম্যান্স কাস্টমাইজ করতে পারেন।

Content added By

Routing এবং URL Mapping

Routing এবং URL Mapping হলো ASP.Net এ HTTP রিকোয়েস্টকে সঠিক কন্ট্রোলার বা অ্যাকশন এর সাথে সংযুক্ত করার প্রক্রিয়া। এটি একটি গুরুত্বপূর্ণ অংশ যা অ্যাপ্লিকেশন পরিচালনার জন্য উপযুক্ত রিকোয়েস্ট প্রক্রিয়াকরণ নিশ্চিত করে।


১. Routing কী?

Routing হলো একটি কৌশল যা HTTP রিকোয়েস্ট URL এর ভিত্তিতে সঠিক কন্ট্রোলার এবং অ্যাকশন নির্বাচন করতে সাহায্য করে। ASP.Net MVC এবং ASP.Net Core এ, রাউটিং একটি URL pattern (যেমন /home/index) ব্যবহার করে কন্ট্রোলারের নির্দিষ্ট অ্যাকশনে রিকোয়েস্টটি পাঠায়।

ASP.Net রাউটিং সিস্টেম, URL এবং Controller এর মধ্যে সম্পর্ক স্থাপন করে, যাতে যে রিকোয়েস্ট পাঠানো হচ্ছে সেটি সঠিকভাবে প্রক্রিয়া করা হয়।


২. ASP.Net MVC রাউটিং

ASP.Net MVC এ রাউটিংকে Route Table এর মাধ্যমে কনফিগার করা হয়। প্রাথমিকভাবে, RouteConfig.cs ফাইলের মধ্যে রাউটিং কনফিগারেশন করা হয়।

রাউটিং কনফিগারেশন

  1. RouteConfig.cs ফাইলটি App_Start ফোল্ডারে থাকে এবং এখানে রাউটিং টেবিল তৈরি করা হয়।
  2. রাউটিং টেবিলের মধ্যে আপনি URL pattern এবং controller-action সম্পর্ক স্থাপন করতে পারেন।

RouteConfig.cs ফাইলের উদাহরণ:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // Default route configuration
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

রাউটিং কনফিগারেশন ব্যাখ্যা:

  • name: রাউটের নাম।
  • url: URL প্যাটার্ন যা কন্ট্রোলার, অ্যাকশন এবং প্যারামিটার নির্ধারণ করে।
  • defaults: ডিফল্ট ভ্যালু, যেমন ডিফল্ট কন্ট্রোলার এবং অ্যাকশন।
  • UrlParameter.Optional: প্যারামিটার ঐচ্ছিক।

এখানে, {controller}/{action}/{id} হলো URL pattern, যার মাধ্যমে রিকোয়েস্ট কন্ট্রোলার এবং অ্যাকশন এর সাথে ম্যাপ হবে।


৩. ASP.Net Core রাউটিং

ASP.Net Core তে রাউটিং কনফিগারেশনটা একটু ভিন্ন। এখানে Startup.cs ফাইলে রাউটিং কনফিগার করা হয় এবং Middleware ব্যবহার করে রিকোয়েস্ট হ্যান্ডলিং করা হয়।

রাউটিং কনফিগারেশন (Startup.cs)

ASP.Net Core তে রাউটিং কনফিগার করতে, প্রথমে ConfigureServices মেথডে সার্ভিস অ্যাড করতে হয় এবং পরে Configure মেথডে রাউটিং মডিউল ব্যবহার করতে হয়।

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllersWithViews(); // MVC এর জন্য সার্ভিস অ্যাড
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }

        app.UseRouting(); // রাউটিং মধ্য়স্থলে যুক্ত করা

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

রাউটিং কনফিগারেশন ব্যাখ্যা:

  • UseRouting(): রাউটিং সিস্টেম অ্যাকটিভেট করে।
  • MapControllerRoute(): URL প্যাটার্ন এবং কন্ট্রোলার-ম্যাপিং নির্ধারণ করে।
  • pattern: {controller=Home}/{action=Index}/{id?} হলো রাউটিং প্যাটার্ন, যেখানে controller, action এবং id মান ম্যাপ হয়।

৪. URL Mapping কী?

URL Mapping হলো একটি কৌশল যা URL প্যাটার্নকে কোডের নির্দিষ্ট অংশ (যেমন কন্ট্রোলার এবং অ্যাকশন) এর সাথে সম্পর্কিত করে। এটি রাউটিংয়ের একটি অংশ এবং URL ম্যানিপুলেশন সিস্টেমকে সহজ করে।

URL Mapping এর উদাহরণ:

  1. HomeController এর Index অ্যাকশনকে এই URL এর সাথে সম্পর্কিত করা:
    • URL: /home/index
    • কন্ট্রোলার: HomeController
    • অ্যাকশন: Index
  2. ProductController এর Details অ্যাকশনকে এই URL এর সাথে সম্পর্কিত করা:
    • URL: /product/details/5
    • কন্ট্রোলার: ProductController
    • অ্যাকশন: Details
    • প্যারামিটার: 5

URL Mapping-এর ফিচার:

  • URL Mapping ডাইনামিক প্যারামিটারও সমর্থন করে, যেমন: {controller}/{action}/{id?}, যেখানে id ঐচ্ছিক।
  • আপনি চাইলে রাউটিং প্যাটার্নে URL এর অংশকে কাস্টমাইজ করতে পারেন যেমন {category}/{id}

৫. Route Constraints

ASP.Net এ Route Constraints ব্যবহার করে আপনি URL প্যারামিটারগুলোর জন্য নির্দিষ্ট শর্ত আরোপ করতে পারেন। এটি রাউটিং সিস্টেমে আরও সুনির্দিষ্ট নিয়ন্ত্রণ প্রদান করে।

উদাহরণ:

routes.MapRoute(
    name: "ProductDetails",
    url: "product/{id}",
    defaults: new { controller = "Product", action = "Details" },
    constraints: new { id = @"\d+" }  // এখানে id শুধুমাত্র ডিজিট হতে পারে
);

এখানে constraints ব্যবহার করে id প্যারামিটার শুধুমাত্র ডিজিট হতে হবে (যেমন product/123 ঠিক থাকবে, কিন্তু product/abc হবে না)।


৬. Area Routing

ASP.Net MVC বা Core এ আপনি Areas ব্যবহার করে বড় অ্যাপ্লিকেশনগুলো মডুলার করে সাজাতে পারেন। এর মাধ্যমে একটি অ্যাপ্লিকেশনের ভিন্ন ভিন্ন সেকশন বা মডিউলকে আলাদা রাউটিং প্যাটার্নে ভাগ করা যায়।

Area Routing উদাহরণ:

public class AreaRegistration : AreaRegistration 
{
    public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "Area_default",
            "Admin/{controller}/{action}/{id}",
            new { controller = "Dashboard", action = "Index", id = UrlParameter.Optional }
        );
    }
}

এখানে Admin এর জন্য আলাদা রাউটিং তৈরি করা হয়েছে।


সারাংশ

  • Routing এবং URL Mapping ASP.Net অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ, কারণ এটি কন্ট্রোলার, অ্যাকশন এবং ইউআরএল প্যারামিটারগুলির মধ্যে সম্পর্ক স্থাপন করে।
  • ASP.Net Core তে রাউটিং আরও সুবিধাজনক এবং কাস্টমাইজযোগ্য, যেখানে Middleware এবং Endpoint Routing ব্যবহৃত হয়।
  • Route Constraints এবং Area Routing এর মাধ্যমে আরও সুনির্দিষ্ট এবং মডুলার রাউটিং সেটআপ করা যায়।
Content added By

Parameter Binding এবং Query Strings

ASP.Net এ Parameter Binding এবং Query Strings হল দুইটি গুরুত্বপূর্ণ ফিচার যা URL এবং HTTP রিকোয়েস্ট থেকে ডেটা সংগ্রহ এবং পরিচালনা করতে ব্যবহৃত হয়। এগুলি বিশেষভাবে ওয়েব অ্যাপ্লিকেশনে ইউজার ইন্টারঅ্যাকশন এবং ডেটা পাস করার জন্য গুরুত্বপূর্ণ।


Parameter Binding

Parameter Binding হলো সেই প্রক্রিয়া যেখানে ASP.Net কন্ট্রোলার মেথডগুলির প্যারামিটারগুলোর মান স্বয়ংক্রিয়ভাবে HTTP রিকোয়েস্ট থেকে পূর্ণ হয়। এর মাধ্যমে ইউজার থেকে প্রাপ্ত ইনপুট সহজেই কন্ট্রোলারে পাঠানো যায় এবং প্রসেস করা হয়।


Parameter Binding in ASP.Net MVC

ASP.Net MVC তে, URL বা ফর্ম ডাটা থেকে কন্ট্রোলারের প্যারামিটার গুলো স্বয়ংক্রিয়ভাবে বাইন্ড হয়ে যায়। এটি বিভিন্ন উৎস থেকে (যেমন: Query Strings, Form Data, Route Data) প্যারামিটারগুলোর মান গ্রহণ করতে পারে।

১. Route Data Binding

  • ASP.Net MVC তে URL রাউটিংয়ের মাধ্যমে প্যারামিটারগুলি কন্ট্রোলারের প্যারামিটারগুলির সাথে বাউন্ড হতে পারে। উদাহরণস্বরূপ:

    public ActionResult ShowProduct(int id)
    {
        var product = db.Products.Find(id);
        return View(product);
    }
    
  • যদি URL হয়: /Product/ShowProduct/5, তবে id প্যারামিটারটি 5 দিয়ে পূর্ণ হবে।

২. Query String Binding

  • URL এর সাথে query strings ব্যবহার করে প্যারামিটারগুলো পাস করা যায়। উদাহরণ:
    • URL: /Product/ShowProduct?id=5
    • কন্ট্রোলার মেথড:

      public ActionResult ShowProduct(int id)
      {
          var product = db.Products.Find(id);
          return View(product);
      }
      
    • এখানে, id প্যারামিটারটি query string থেকে স্বয়ংক্রিয়ভাবে বাউন্ড হয়ে যায়।

৩. Form Data Binding

  • ফর্মের মাধ্যমে ডাটা পাঠানোর জন্য POST মেথড ব্যবহৃত হয়। ফর্মের ইনপুট ফিল্ডগুলোর মান কন্ট্রোলারের প্যারামিটার বা মডেল প্রপার্টির সাথে স্বয়ংক্রিয়ভাবে বাউন্ড হয়ে যায়।

    <form method="post">
        <input type="text" name="name" />
        <input type="submit" value="Submit" />
    </form>
    
    [HttpPost]
    public ActionResult SubmitForm(string name)
    {
        // name প্যারামিটারটি ফর্ম থেকে আসবে
        return Content("Hello, " + name);
    }
    

Query Strings

Query Strings URL এর অংশ, যা ? চিহ্ন দ্বারা শুরু হয় এবং একাধিক প্যারামিটার এবং মানের জোড়াকে & দিয়ে আলাদা করা হয়। Query strings সাধারণত ইউজারের ইনপুট বা ডেটা সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়।


Query String in ASP.Net MVC

Query String সাধারণত URL এ অ্যাপেন্ড হয়ে থাকে এবং কন্ট্রোলারে প্যারামিটার হিসেবে ইনপুট পাস করে। এই তথ্যটি HttpContext.Request.QueryString বা সরাসরি কন্ট্রোলারের প্যারামিটারগুলির মাধ্যমে প্রাপ্ত করা যায়।

১. Query String Example

  • URL: https://example.com/Product/Details?id=123&category=electronics
  • কন্ট্রোলার:

    public ActionResult Details(int id, string category)
    {
        var product = db.Products.Find(id);
        ViewBag.Category = category;
        return View(product);
    }
    

২. Query String Access in Code

  • Request.QueryString ব্যবহার করে, আপনি URL থেকে প্যারামিটারগুলির মান সরাসরি নিতে পারেন:

    public ActionResult Index()
    {
        string id = Request.QueryString["id"];
        string category = Request.QueryString["category"];
        return Content("ID: " + id + ", Category: " + category);
    }
    

Query Strings এর সুবিধা এবং অসুবিধা

সুবিধা:

  • সহজ ডেটা পাসিং: URL এর মাধ্যমে ডেটা সরাসরি পাঠানো যায়।
  • বুকমার্কিং: URL তে ডেটা থাকলে ইউজার সেই পেজটি বুকমার্ক করতে পারে।

অসুবিধা:

  • লিমিটেশন: URL এর দৈর্ঘ্য সীমাবদ্ধ থাকে, তাই খুব বড় ডেটা পাঠানো সম্ভব নয়।
  • নিরাপত্তা ঝুঁকি: Sensitive ডেটা (যেমন: পাসওয়ার্ড) URL এ পাঠানো ঝুঁকিপূর্ণ, কারণ URL দেখতে পাওয়া যায় এবং ব্রাউজারের হিস্টোরিতে সেভ হয়।
  • SEO এ সমস্যা: কিছু ক্ষেত্রে URL এর query string SEO এর জন্য আদর্শ নয়।

ASP.Net Core: Parameter Binding and Query Strings

ASP.Net Core তেও একইভাবে প্যারামিটার বাইন্ডিং এবং Query Strings ব্যবহার করা হয়, তবে এখানে Model Binding এবং Binding from the Body এর আরও উন্নত ব্যবস্থাপনা পাওয়া যায়।

ASP.Net Core Example:

  • URL: /Product/Details?id=5&category=electronics
  • কন্ট্রোলার:

    public IActionResult Details(int id, string category)
    {
        var product = db.Products.Find(id);
        ViewData["Category"] = category;
        return View(product);
    }
    

ASP.Net Core তে, আপনি Query String, Route, এবং Body থেকে প্যারামিটার বাউন্ড করতে পারবেন এবং Model Binding এর মাধ্যমে একাধিক প্যারামিটার স্বয়ংক্রিয়ভাবে বাউন্ড হয়ে যায়।


সারাংশ

ASP.Net এ Parameter Binding এবং Query Strings এর মাধ্যমে ডেটা পাস করার কাজটি সহজ হয়। Parameter Binding ডেভেলপারদের কোডের মধ্যে বিভিন্ন ডেটা সোর্স থেকে প্যারামিটার গুলি স্বয়ংক্রিয়ভাবে বাউন্ড করতে সাহায্য করে, যেখানে Query Strings URL এর মাধ্যমে ডেটা পাঠানোর একটি সাধারণ পদ্ধতি।

Content added By

Dependency Injection ব্যবহার

Dependency Injection (DI) হলো একটি ডিজাইন প্যাটার্ন যা কম্পোনেন্টগুলোর মধ্যে ডিপেনডেন্সি বা নির্ভরতাগুলি ইনজেক্ট করার জন্য ব্যবহৃত হয়। ASP.Net Core অ্যাপ্লিকেশনগুলিতে Dependency Injection খুবই গুরুত্বপূর্ণ এবং এটি বিল্ট-ইন ভাবে সমর্থিত, যা অ্যাপ্লিকেশনের বিভিন্ন অংশের মধ্যে ডিপেনডেন্সি ম্যানেজমেন্টকে সহজ করে তোলে।


Dependency Injection কি?

Dependency Injection (DI) একটি প্রযুক্তি যা ক্লাসগুলোর মধ্যে ব্যবহৃত ডিপেনডেন্সি (যেমন সার্ভিস, অবজেক্ট, বা রিসোর্স) বাইরের কোনো উৎস থেকে ইনজেক্ট করে, যাতে সেই ক্লাসগুলি সরাসরি তাদের ডিপেনডেন্সি তৈরি না করে। এর ফলে কোডের মডুলারিটি, রিইউজেবিলিটি এবং টেস্টেবিলিটি বৃদ্ধি পায়।

ASP.Net Core এ, DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনকে আরও বেশি ফ্লেক্সিবল, স্কেলেবল এবং টেস্টযোগ্য করা হয়।


ASP.Net Core-এ Dependency Injection কিভাবে কাজ করে?

ASP.Net Core-এর Startup.cs ফাইলে ConfigureServices মেথডে নির্দিষ্ট পরিষেবাগুলোর জন্য ডিপেনডেন্সি রেজিস্টার করা হয় এবং Configure মেথডে সেই পরিষেবাগুলি কনফিগার ও ব্যবহার করা হয়।

ASP.Net Core এর DI এর মূল উপাদানগুলো হলো:

  • Transient: একবার ব্যবহার শেষে ইনস্ট্যান্সটি ধ্বংস হয়। এই পরিষেবাটি স্বল্পমেয়াদী এবং প্রতি অনুরোধে নতুনভাবে তৈরি হয়।
  • Scoped: একসাথে এক বা একাধিক HTTP অনুরোধের জন্য একই ইনস্ট্যান্স ব্যবহার হয়।
  • Singleton: অ্যাপ্লিকেশনজুড়ে একটি ইনস্ট্যান্স তৈরি হয় এবং সবসময় সেই এক ইনস্ট্যান্স ব্যবহৃত হয়।

Dependency Injection কিভাবে ব্যবহার করবেন?

১. প্রথমে Service Interface তৈরি করুন

একটি ইন্টারফেস তৈরি করুন যা আপনার সার্ভিসের জন্য শর্তাবলী নির্ধারণ করবে।

public interface IProductService
{
    IEnumerable<string> GetAllProducts();
}

২. Service ক্লাস তৈরি করুন

এখন, সেই ইন্টারফেসটি ইমপ্লিমেন্ট করে একটি ক্লাস তৈরি করুন।

public class ProductService : IProductService
{
    public IEnumerable<string> GetAllProducts()
    {
        return new List<string> { "Product 1", "Product 2", "Product 3" };
    }
}

৩. Dependency Injection রেজিস্টার করা

এখন, Startup.cs ফাইলে ConfigureServices মেথডে এই সার্ভিসটি রেজিস্টার করুন।

public void ConfigureServices(IServiceCollection services)
{
    // DI কন্টেনারে সার্ভিস রেজিস্টার করা
    services.AddScoped<IProductService, ProductService>();

    services.AddControllersWithViews();
}

এখানে, AddScoped ব্যবহার করা হয়েছে, যার মানে হল সার্ভিসটি HTTP request এর জন্য Scoped হবে। অর্থাৎ, একই HTTP অনুরোধের মধ্যে একাধিক কন্ট্রোলারে একই ইনস্ট্যান্স ব্যবহার হবে, কিন্তু নতুন HTTP অনুরোধের জন্য নতুন ইনস্ট্যান্স তৈরি হবে।

৪. Controller এ Dependency Inject করা

এখন আপনার কন্ট্রোলারে এই সার্ভিসটি ইনজেক্ট করুন। কন্ট্রোলারে Constructor Injection ব্যবহার করা হয়।

public class HomeController : Controller
{
    private readonly IProductService _productService;

    // DI মাধ্যমে সার্ভিস ইনজেক্ট করা হচ্ছে
    public HomeController(IProductService productService)
    {
        _productService = productService;
    }

    public IActionResult Index()
    {
        var products = _productService.GetAllProducts();
        return View(products);
    }
}

৫. Service ব্যবহার করা

এখন HomeController এর মধ্যে ইনজেক্ট করা সার্ভিসটি ব্যবহার করা হচ্ছে, যা কন্ট্রোলারের Index() অ্যাকশনে GetAllProducts() মেথডের মাধ্যমে ডেটা রিটার্ন করছে।


Dependency Injection এর সুবিধা

  1. কোডের পুনঃব্যবহারযোগ্যতা (Reusability):
    • Dependency Injection ব্যবহারের মাধ্যমে সার্ভিসগুলো পুনঃব্যবহারযোগ্য হয়, কারণ সার্ভিসটি কেবল নির্দিষ্ট ইন্টারফেসের মাধ্যমে অ্যাক্সেস করা যায় এবং তার ইমপ্লিমেন্টেশন পরিবর্তন করা সহজ।
  2. টেস্টিং সুবিধা:
    • DI টেস্টিং সহজ করে তোলে, কারণ আপনি মক সার্ভিস বা স্টাব ব্যবহার করে ইউনিট টেস্ট করতে পারবেন, যা সরাসরি বাস্তব ডিপেনডেন্সি থেকে মুক্ত।
  3. স্কেলেবিলিটি:
    • আপনি সহজেই নতুন সার্ভিস যোগ করতে পারেন এবং প্রয়োজনে পরিষেবা রেজিস্ট্রেশন পরিবর্তন করতে পারেন।
  4. কোডের মডুলারিটি বৃদ্ধি:
    • কোডের বিভিন্ন অংশের মধ্যে একে অপরের উপর নির্ভরতা কমিয়ে মডুলারিটি বৃদ্ধি পায়।

বিভিন্ন লাইফটাইম সার্ভিস ব্যবহার

ASP.Net Core DI সিস্টেম তিনটি ধরনের লাইফটাইম সাপোর্ট করে:

  1. Transient: প্রতিটি অনুরোধে নতুন ইনস্ট্যান্স তৈরি হবে।

    services.AddTransient<IProductService, ProductService>();
    
  2. Scoped: প্রতিটি HTTP অনুরোধে একটি ইনস্ট্যান্স থাকবে।

    services.AddScoped<IProductService, ProductService>();
    
  3. Singleton: পুরো অ্যাপ্লিকেশনে একমাত্র ইনস্ট্যান্স ব্যবহার হবে।

    services.AddSingleton<IProductService, ProductService>();
    

সারাংশ

ASP.Net Core অ্যাপ্লিকেশনগুলোতে Dependency Injection (DI) ব্যবহারের মাধ্যমে আপনি সহজে সার্ভিসগুলো রেজিস্টার, ম্যানেজ এবং কনফিগার করতে পারেন, যা কোডের মডুলারিটি, স্কেলেবিলিটি, এবং টেস্টেবিলিটি বৃদ্ধি করে। DI ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনগুলির মধ্যে low coupling এবং high cohesion নিশ্চিত করা সম্ভব হয়, যা একে সহজে মেইনটেইন এবং আপডেট করা যায়।

Content added By
Promotion